iT邦幫忙

2024 iThome 鐵人賽

DAY 22
0
自我挑戰組

用 C/C++ 或 Rust 刷 Leetcode系列 第 22

「鍊節串列裡的 pointer to pointer」 : 82. Remove Duplicates from Sorted List II

  • 分享至 

  • xImage
  •  

今天練習 pointer to pointer 的寫法前,先練習了 你所不知道的 C 語言: linked list 這篇裡提供的 LeetCode 21. Merge Two Sorted Lists 的解法邏輯

82. Remove Duplicates from Sorted List II(medium)

題目敘述:
給一個排序好的鍊結串列的首節點,刪除所有具有重複數字的節點,只留下與原始清單不同的數字。傳回已排序的鍊結串列。

題目提供的輸入輸出:

Input: head = [1,2,3,3,4,4,5]
Output: [1,2,5]

解題:
ptr2ptr 為確定 unique node 後要接的位置。如果目前 *ptr2ptr 不是 unique node 那就將此位置跳掉。反之,如果是 unique node ,那就保留,即是將 ptr2ptr 移到下一個位置。

class Solution {
public:
    ListNode* deleteDuplicates(ListNode* head) {
        ListNode *dummy = new ListNode(-101, head), **ptr2ptr = &(dummy->next) ;
        int preV = -101;
        for (ListNode *n = *ptr2ptr; n; preV = n->val, n = *ptr2ptr) {
            if (preV == n->val || (n->next && n->val == n->next->val)) { // skip
                *ptr2ptr = n->next;
            } else { // concatenat
                ptr2ptr = &n->next;
            }
        }
        return dummy->next;
    }
};

時間複雜度 O(N), N 為鍊結串列的節點數

p.s. 此程式碼會有 memory leak的問題啊


上一篇
「 Linked list」 : 24 Swap Node in Pairs
下一篇
「Greedy」: 881. Boats to Save People
系列文
用 C/C++ 或 Rust 刷 Leetcode30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言